Nakama Realtime chat
1 on 1
group
chat room
メッセージの種類
online
stored message
Channel
Realtime chat engine のメッセージは、
channelに帰属する。
ユーザーはチャンネルに明示的に
参加したり離脱する。
= subscribe, mute
channel の種類
1 on 1
group
グループ外のユーザーは参加できない
chat room
許可なしにすべてのユーザーが参加できる
ライブイベント、トーナメント等に最適
Persistence & History
デフォルトですべてのチャンネルは永続的
メッセージはデータベースに保存される。
後で、履歴として使用できる(オフラインユーザーが見逃したメッセージに追いつくために使われる)
オンラインに接続しているユーザー限定にするには、
persistence=falseにする
Recieve Messages
NakamaSocketにハンドラーを登録することで、
コールバックが実行される
code: .js
socket.onchannelmessage = (message) => {
console.log("Received a message on channel: %o", message.channel_id);
console.log("Message content: %o", message.content);
};
NakamaAPI.ApiChannelMessageオブジェクト
message.
channel_id
code
content : string
Message type
message.code の整数値で判断される
0: chat message
1: chat update (以前送ったものを修正、更新)
2: chat remove (削除)
3: joined group (user)
4: added to group (message)
5: left group (user)
6: kicked from group (user)
7: promoted in group (user)
8: banned in group (user)
9: demoted in group (user)
JOIN chat
ルームは、そこに参加するユーザーに対して動的に作られる
(多分、roomがサーバーメモリ上に作成される)
code: .js
const userId = "<user id>";
const response = await socket.send({ channel_join: {
type: 2, // 1 = Room, 2 = Direct Message, 3 = Group
target: userId,
persistence: true,
hidden: false
} });
console.log("You can now send messages to channel id:", response.channel.id);
NakamaSocket に channel_joinを含むメッセージを送る
(基本的にすべてがNakamaSocketに送るjson)
Leave Chat
channel_leaveメッセージをSocketに送る
基本的に、チャンネルのユーザーの増減通知は最適化されており
参加したり退室したりしたときだけメッセージとして通知が来る
Message Histories
v2/channel API から取得
query param で channel_idを指定
channel_id
cursor
limit
foward : bool